﻿using System;
using System.Collections;
using System.Collections.ObjectModel;
using StockholmsStad.Windows.UI.Modules.Maintenance.Models;
using StockholmsStad.Runtime.Serialization.DataContract;
using System.Collections.Generic;
using System.Windows.Controls;

namespace StockholmsStad.Windows.UI.Modules.Maintenance.Interfaces
{
    public interface IMaintenanceService
    {
        /// <summary>
        /// Hämtar schema för nuvarande period
        /// </summary>
        /// <returns>Schemat (<see cref="GenerateTimePresentationModel"/>).</returns>
        GenerateTimePresentationModel RetrieveSchedule();

        /// <summary>
        /// Hämtar alla förrättare som är verksamma inom vid ett visst datum. 
        /// </summary>
        /// <param name="model"> (<see cref="MinisterTimeBlockPresentationModel"/>)</param>
        /// <param name="date">Det datum som förrättaren ska vara verksam. </param>
        void GetMinisters(MinisterTimeBlockPresentationModel model, DateTime date);

        /// <summary>
        /// Hämtar alla par som kan avpersonifieras
        /// </summary>
        /// <param name="fromDate">Fråndatum</param>
        /// <param name="toDate">Tilldatum. </param>
        ObservableCollection<DepersonateCouple> GetCouplesForDepersonation(DateTime fromDate, DateTime toDate);

        /// <summary>
        /// Avpersonifierar en lista med par
        /// </summary>
        /// <param name="couples">En lista av typen <see cref="Couple"/> med alla par som ska avpersonifieras </param>
        /// <returns>Antal par som avpersonifierades.</returns>
        int DepersonateCouples(IList couples);
    }
}
